home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 5 / BBS in a Box -Volume V (BBS in a Box) (April 1992).iso / Files / Prog / U-Z / XcShell.cpt / XcShell / XCMDutils.c < prev    next >
Encoding:
Text File  |  1991-09-01  |  2.5 KB  |  134 lines  |  [TEXT/KAHL]

  1. //
  2. //    "XcShell" Skeletal XCMD/XFCN    miscellaneous public and semiprivate utilities
  3. //
  4. //    Copyright ©1991 Mark M. Owen -- All rights reserved
  5. //
  6.  
  7. #include <string.h>
  8.  
  9. #include "HyperXCmd.h"
  10.  
  11. #define    _XCMDUTILS_
  12.  
  13. #include "XCMDconstants.h"
  14. #include "XCMDglobals.h"
  15. #include "XCMDutils.h"
  16.  
  17.  
  18. semiprivate void    UnlockParams    (XCmdBlockPtr paramPtr);
  19. semiprivate void    Fail            (XCmdBlockPtr paramPtr,int msg);
  20. semiprivate int        verbNumber        (char *theVerb,pGlobals pGlb);
  21.  
  22.  
  23. void zero2pas(char *zeroStr, char *pasStr)
  24. {
  25.     register int    l    = 0;
  26.     register char    *pS = (char*)pasStr+1;    
  27.  
  28.     while( *zeroStr ) {
  29.         *pS++ = *zeroStr++;
  30.         l++;
  31.         if( l > 254 )
  32.             break;
  33.     }
  34.     pasStr[0]=l;
  35. }
  36.  
  37. Boolean    EqualCPString(char *c,char *p)
  38. {    
  39.     char    str[256];
  40.  
  41.     zero2pas( c, str );
  42.     return EqualString( str, p, 0, 0 );
  43. }
  44.  
  45. void    AppendCStr(char *s1,char *s2)
  46. {
  47.     strcat( s1, s2 );
  48. }
  49.  
  50. void AppendNum(long n,char *str,char *delim)
  51. {
  52.     char    S[257];
  53.  
  54.     NumToString( n, S );
  55.     S[S[0]+1] = 0x00;
  56.     AppendCStr( str, &S[1] );
  57.     AppendCStr( str, delim );
  58. }
  59.  
  60. void    SetReturnValue(char *msg)    //    msg MUST be a pascal string
  61. {
  62.     global_paramPtr->returnValue = PasToZero( global_paramPtr, (StringPtr)msg );
  63. }
  64.  
  65. short    ResIdOf(char *name,ResType type)
  66. {
  67.     Handle    h;
  68.     short    itsId=-1;
  69.     ResType    itsType;
  70.     Str255    itsName;
  71.  
  72.     BlockMove( (Ptr)name, (Ptr)itsName, ((long)*name)+1 );
  73.     if( h = GetNamedResource( type, itsName ) )
  74.         GetResInfo( h, &itsId, &itsType, itsName );
  75.     return itsId;
  76. }
  77.  
  78. semiprivate void    UnlockParams(XCmdBlockPtr paramPtr)
  79. {
  80.     register    int i;
  81.     
  82.     for( i=0; i<paramPtr->paramCount; i++ )
  83.         HUnlock( (Handle)paramPtr->params[i] );
  84. }
  85.  
  86. semiprivate void    Fail(XCmdBlockPtr paramPtr,int msg)
  87. {
  88.     Handle    h;
  89.     short    theId;
  90.     ResType    theType;
  91.     char    name[256];
  92.     char    theStr[512] = "\pError:";
  93.     int        size;
  94.     
  95.     if( (h = GetNamedResource( 'STR ', ERRORTAG )) ) {
  96.         HLock( h );
  97.         BlockMove( (Ptr)*h, (Ptr)theStr, (long)**h );
  98.         HUnlock( h );
  99.         ReleaseResource( h );
  100.     }
  101.     size = *theStr;
  102.     if( (h = GetNamedResource( 'STR#', ERRORS )) ) {
  103.         GetResInfo( h, &theId, &theType, name );
  104.         GetIndString( &theStr[size+1], theId, msg );
  105.         if( theStr[size+1] > (255-size) )
  106.             *theStr = 255;
  107.         else
  108.             *theStr += theStr[size+1];
  109.         theStr[size+1] = ' ';
  110.         ReleaseResource( h );
  111.     }
  112.     UnlockParams( paramPtr );
  113.     paramPtr->returnValue = PasToZero( paramPtr, (StringPtr)theStr );
  114. }
  115.  
  116. semiprivate int    verbNumber(char *theVerb,pGlobals pGlb)
  117. {
  118.     register
  119.         char    *pStr    = (*(pGlb->hVerbs))+2;
  120.     register
  121.         int        nStr    = pGlb->nVerbs;
  122.     register
  123.         int        ixStr     = 0;
  124.     
  125.     while( nStr-- ) {
  126.         if( EqualString( theVerb, pStr, 0, 0 ) )
  127.             return ixStr;
  128.         pStr += pStr[0]+1;
  129.         ixStr++;
  130.     }
  131.     
  132.     return vInError;
  133. }
  134.